Micron Document
____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|


The NomadNet German Wikipedia | Archives | Info
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b

πŸ” Search

Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―Β―

Box-Muller-Methode
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Die Box-Muller-Methode (nach George Edward Pelham Box und Mervin Edgar Muller 1958) ist ein Verfahren zur Erzeugung normalverteilter Zufallszahlen.

Contents

β€’ Definition
β€’ Weblinks
β€’ Literatur

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Definition

Bei dieser Methode werden zunΓ€chst zwei unabhΓ€ngige Standardzufallszahlen u 1 {\displaystyle u_{1}} und u 2 {\displaystyle u_{2}} benΓΆtigt. Diese lassen sich beispielsweise mit einem Zufallszahlengenerator erzeugen. Standardzufallszahlen unterliegen einer Rechteckverteilung mit den Parametern 0 {\displaystyle 0} und 1 {\displaystyle 1} .

Es lΓ€sst sich zeigen, dass man nach folgendem Transformationsschritt daraus zwei standardnormalverteilte (stochastisch) unabhΓ€ngige Zufallszahlen z 0 {\displaystyle z_{0}} und z 1 {\displaystyle z_{1}} erhΓ€lt:

z 0 = βˆ’ βˆ’ 2 ln ⁑ ⁑ u 1 cos ⁑ ⁑ ( 2 Ο€ Ο€ u 2 ) {\displaystyle z_{0}={\sqrt {-2\ln u_{1}}}\cos(2\pi u_{2})}

und

z 1 = βˆ’ βˆ’ 2 ln ⁑ ⁑ u 1 sin ⁑ ⁑ ( 2 Ο€ Ο€ u 2 ) {\displaystyle z_{1}={\sqrt {-2\ln u_{1}}}\sin(2\pi u_{2})} .

Schreibt man das Paar ( z 0 , z 1 ) {\displaystyle (z_{0},z_{1})} in Polarkoordinaten, also

z 0 = r cos ⁑ ⁑ Ο† Ο† {\displaystyle z_{0}=r\cos \varphi } und z 1 = r sin ⁑ ⁑ Ο† Ο† {\displaystyle z_{1}=r\sin \varphi } ,

dann gilt:

r = βˆ’ βˆ’ 2 ln ⁑ ⁑ u 1 {\displaystyle r={\sqrt {-2\ln u_{1}}}\ } und Ο† Ο† = 2 Ο€ Ο€ u 2 {\displaystyle \varphi =2\pi u_{2}} .

Anwendung der Inversionsmethode zur Transformation von u 1 {\displaystyle u_{1}} und u 2 {\displaystyle u_{2}} in die Polarkoordinaten r {\displaystyle r} und Ο† Ο† {\displaystyle \varphi } zeigt, dass Ο† Ο† {\displaystyle \varphi } einer Rechteckverteilung mit den Parametern 0 {\displaystyle 0} und 2 Ο€ Ο€ {\displaystyle 2\pi } unterliegt und r 2 {\displaystyle r^{2}} einer Exponentialverteilung mit dem Parameter 1 2 {\displaystyle {\tfrac {1}{2}}} . Aus diesem Ergebnis lΓ€sst sich die gemeinsame Verteilung von z 1 {\displaystyle z_{1}} und z 2 {\displaystyle z_{2}} herleiten. Sie beruht auf der Beziehung:

1 2 e βˆ’ βˆ’ 1 2 r 2 d ( r 2 ) 1 2 Ο€ Ο€ d Ο† Ο† = 1 2 Ο€ Ο€ e βˆ’ βˆ’ 1 2 r 2 r d r d Ο† Ο† = 1 2 Ο€ Ο€ e βˆ’ βˆ’ 1 2 ( z 0 2 + z 1 2 ) d z 0 d z 1 {\displaystyle {\tfrac {1}{2}}e^{-{\frac {1}{2}}r^{2}}\mathrm {d} (r^{2}){\tfrac {1}{2\pi }}\mathrm {d} \varphi ={\tfrac {1}{2\pi }}e^{-{\frac {1}{2}}r^{2}}r\mathrm {d} r\mathrm {d} \varphi ={\tfrac {1}{2\pi }}e^{-{\frac {1}{2}}(z_{0}^{2}+z_{1}^{2})}\mathrm {d} z_{0}\mathrm {d} z_{1}}

Die bisherigen Transformationsschritte erzeugen zwei standardnormalverteilte Zufallszahlen. Eine Standardnormalverteilung ist ein Spezialfall der Normalverteilung, nΓ€mlich mit dem Erwartungswert ΞΌ ΞΌ = 0 {\displaystyle \mu =0} und der Varianz Οƒ Οƒ 2 = 1 {\displaystyle \sigma ^{2}=1} .

Um mit der Box-Muller-Methode Normalverteilungen mit beliebigen Parametern zu erzeugen, lassen sich die erhaltenen z i {\displaystyle z_{i}} nach dem Muster

x i = ΞΌ ΞΌ + Οƒ Οƒ β‹… β‹… z i {\displaystyle x_{i}=\mu +\sigma \cdot z_{i}}

transformieren. In der obigen Notation steht Ο€ Ο€ {\displaystyle \pi } wie ΓΌblich fΓΌr die Kreiszahl, sin {\displaystyle \sin } fΓΌr den Sinus, cos {\displaystyle \cos } fΓΌr den Kosinus und ln {\displaystyle \ln } fΓΌr den natΓΌrlichen Logarithmus.

Verwendet man zur Erzeugung der u i {\displaystyle u_{i}} einen linearen Kongruenzgenerator, so liegen die Paare ( z 0 , z 1 ) {\displaystyle (z_{0},z_{1})} auf einer durch eine Spirale beschriebenen Kurve. Dieses Verhalten ist eng mit dem im Satz von Marsaglia beschriebenen Hyperebenenverhalten linearer Kongruenzgeneratoren verwandt.

Dieses Problem lΓ€sst sich umgehen, wenn statt des linearen Kongruenzgenerators ein inverser Kongruenzgenerator oder die Polar-Methode verwendet wird.

Die Box-Muller-Methode erzeugt zunΓ€chst zwei stochastisch unabhΓ€ngige und standardnormalverteilte Zufallszahlen, die sich dann in eine Normalverteilung mit beliebigen Parametern transformieren lassen. Die Box-Muller-Methode erfordert die Auswertung von Logarithmen und trigonometrischen Funktionen, was auf einigen Rechnern sehr zeitaufwendig sein kann.

Weitere MΓΆglichkeiten zur Erzeugung normalverteilter Zufallszahlen sind im Artikel Normalverteilung beschrieben. Eine Alternative ist z. B. die Polar-Methode.cite-ref-1[1]

Programmierung

Die Standard-Box-Muller-Methode erzeugt Werte aus der Standardnormalverteilung mit Erwartungswert 0 und Standardabweichung 1. Die folgende Implementierung in der Programmiersprache C++ generiert 10 Paare von standardnormalverteilten Zufallszahlen aus jeder Normalverteilung mit Erwartungswert ΞΌ ΞΌ {\displaystyle \mu } und Varianz Οƒ Οƒ {\displaystyle \sigma } und gibt sie auf der Konsole aus.

#define _USE_MATH_DEFINES
#include <random>
#include <iostream>
using namespace std;
// Diese Funktion berechnet zwei standardnormalverteilte Zufallszahlen z0 und z1
pair<double, double> generateGaussianNoise(double mu, double sigma)
{
constexpr double epsilon = numeric_limits<double>::epsilon();
// Initialisiert den Zufallszahlengenerator im Bereich von 0 bis 1
static mt19937 rng(random_device{}()); // Standard Mersenne-Twister
static uniform_real_distribution<> runif(0, 1);
double u1, u2; // Deklaration der lokalen Variablen fΓΌr die Zufallszahlen u1 und u2
do // Diese do-while-Schleife erzeugt solange Zufallszahlen bis u1 > epsilon ist
{
u1 = runif(rng);
} while (u1 <= epsilon);
u2 = runif(rng);
// Berechnet z0 und z1
auto magnitude = sigma * sqrt(-2.0 * log(u1));
auto z0 = magnitude * cos(2.0 * M_PI * u2) + mu;
auto z1 = magnitude * sin(2.0 * M_PI * u2) + mu;
return make_pair(z0, z1);
}
// Hauptfunktion die das Programm ausfΓΌhrt
void main()
{
double mu = 0; // Deklaration der lokalen Variablen
double sigma = 1;
for (int i = 0; i < 10; i++) // Diese for-Schleife berechnet 10 Paare von standardnormalverteilten Zufallszahlen und gibt sie auf der Konsole aus
{
pair<double, double> gaussianNoise = generateGaussianNoise(mu, sigma); // Aufruf der Funktion
cout << gaussianNoise.first << "," << gaussianNoise.second << endl; // Ausgabe auf der Konsole
}
}

Weblinks

β€’ Eric W. Weisstein: Box-Muller Transformation. In: MathWorld (englisch).

Literatur

β€’ George Edward Pelham Box, Mervin Edgar Muller: A note on the generation of random normal deviates. In: Annals of Mathematical Statistics, Jg. 29 (1958), Heft 2, ISSN 0003-4851, S. 610–611.
β€’ Otto Moeschlin, Eugen Grycko, Claudia Pohl, Frank Steinert: Kapitel 1.4 Generating Sample Values. In: Diess.: Experimental Stochastics. Springer, Berlin u. a. 1998, ISBN 3-540-14619-9.

Einzelnachweise

cite-note-11. ↑ Vgl. Albert J. Kinderman und John G. Ramage: Computer Generation of Normal Random Numbers. In: Journal of the American Statistical Association, Jg. 71 (1976), Heft 356, S. 893–896.